package com.dragon.backstage.service;

import com.dragon.backstage.domain.param.menu.MenuAddParam;
import com.dragon.backstage.domain.param.menu.MenuChangeStatusParam;
import com.dragon.backstage.domain.param.menu.MenuChangeVisibleParam;
import com.dragon.backstage.domain.param.menu.MenuEditParam;
import com.dragon.backstage.domain.param.menu.MenuParam;
import com.dragon.backstage.domain.vo.menu.MenuAsyncPermissionVo;
import com.dragon.backstage.domain.vo.menu.MenuAsyncRouteVo;
import com.dragon.backstage.domain.vo.menu.MenuDetailVo;
import com.dragon.backstage.domain.vo.menu.MenuVo;
import com.dragon.common.utils.AjaxResult;
import com.dragon.interfaces.entity.Menu;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 菜单权限表 服务类
 * </p>
 *
 * @author dragon
 * @since 2024-08-01 18:05:09
 */
public interface MenuService extends IService<Menu> {

    /**
     * 菜单列表
     *
     * @param menuParam 菜单列表请求参数
     * @return 菜单列表
     */
    AjaxResult<List<MenuVo>> menuList(MenuParam menuParam);

    /**
     * 前端菜单路由列表
     *
     * @return 前端菜单路由列表
     */
    AjaxResult<List<MenuAsyncRouteVo>> menuAsyncRoutes();

    /**
     * 前端用户权限列表
     *
     * @return 用户权限列表
     */
    AjaxResult<List<MenuAsyncPermissionVo>> menuAsyncPermissions();

    /**
     * 菜单详情
     *
     * @param menuId 菜单ID
     * @return 菜单详情
     */
    AjaxResult<MenuDetailVo> menuDetail(Long menuId);

    /**
     * 添加菜单
     *
     * @param param 添加菜单请求参数
     * @return 添加结果
     */
    AjaxResult<Void> addMenu(MenuAddParam param);

    /**
     * 编辑菜单
     *
     * @param param 编辑菜单请求参数
     * @return 编辑结果
     */
    AjaxResult<Void> editMenu(MenuEditParam param);

    /**
     * 删除菜单
     *
     * @param menuId 菜单ID
     * @return 删除结果
     */
    AjaxResult<Void> deleteMenu(Long menuId);

    /**
     * 更改菜单显示状态
     *
     * @param param 更改菜单显示状态请求参数
     * @return 更改结果
     */
    AjaxResult<Void> changeVisible(MenuChangeVisibleParam param);

    /**
     * 更改菜单状态
     *
     * @param param 更改菜单状态请求参数
     * @return 更改结果
     */
    AjaxResult<Void> changeStatus(MenuChangeStatusParam param);

}
